/*
***************************copy right of netinnet.cn ***************************
                           ver 20050826
*/
/* 
注：
  当form 提交=get时，不能再acttion加上参数，如： <form action="do?action=dbquery" method="get"> do后面紧跟的参数无效
  而     提交=post时，可以加上参数 


javascript引用语句： 注./不可省略 
  <SCRIPT LANGUAGE="JavaScript" src="./javascript/basic.js"></SCRIPT>
javascript 系统函数：
eval():求字符串表达式的值
isFinite()：判断一个数是否有限
isNaN()：判断一个值是否为非数字值
parseInt()：把字符串转化为整数 , 解释不了返回0 
parseFloat()
encodeURI():编码为有效的URI
encodeURIComponent()
decodeURI
decodeURIComponent()
escape(character) : 返回ISO Latin-1字符表中的编码。例：escape("&")返回"%26";
unEscape(String)  : 返回String 的ASCII码，例如：unEscape("%26")返回"&" 
toString(): var.toString()将对象的值或数值字面值转换为字符串面值
valueOf():  obj.valueOf() 返回对象的原始值 

String对象的方法：
String.length 属性
String.charAt(index) : index=0 ...
String.indexOf(character,[fromIndex])
String.lastIndexOf(character,[fromIndex])
String.substring(startIndex,endIndex)

String.toLowerCase()
String.toUpperCase()
String.split(separator)：用指定的分隔符将字串分割为子串数组

String.anchor(anchor_name) : <A name=anchor_name> text </A>
String.link(URL) : <A HREF=URL> text </A>


String.big()
String.blink()
String.bold()
String.fontcolor(color)
String.fontsize(size)
String.small()
String.strike()

String.sub()
String.sup()

Math对象的方法：
Math.abs(number)

Math.ceil(number) : 32.5 返回 33
Math.floor(number) : 32.5 返回 32 
Math.round(number) 

Math.max(number1,number2)
Math.min(number1,number2)

Math.random() ： 返回 0-1之间的随机数

Date对象：
首先必须先构造一个Date对象： 
tempDate= new Date();
tempDate= new Date(year,month,day,hours,minutes,seconds);
Date.setHours(0-23)
Date.setMinutes(0-59)
Date.setSeconds(0-59)

Date.setYear(>=1970)
Date.setMonth(1-12)
Date.setDate(1-31)

Date.getDay():星期几
Date.getHours()
Date.getMinutes()
Date.getSeconds()

Date.getYear()
Date.getMonth()
Date.getDate():当月几号

Date.toString(): Month,day,year hh:mm:ss 
Date.toLocalString(): 返回以地方时间表示的日期：mm/dd/yy hh:mm:ss 

注：自定义函数规则： 函数名全部小写 


//=============================================================================
checkBox输入域设为只读：  onclick="return false;" 
radio 必须要有name属性才可以输入，因类只读只需删除其name属性即可，或 onclick="return false;"
input 类型设为只读只需增加 readonly 
select 类型设为只读可增加     disabled

disable 将使 所有obj 变灰，不可输入和操作  

事件：
onChange: 只有在输入导致改变后才触发 ， 通过JavaScript置值(如 form1.zghao0.value='1')方式不会触发，可以在onChange事件中改变对象本身的值而不会导致循环触发onChange .例：onChange="this.value='aaaa'; "

*/

function isnull(arg_input_text)
{ //test in win ie6 ok 
  if (arg_input_text.length>0) 
      return false;
  else
      return true;
}

function isblank(arg_input_text)
{ //test in win ie6 ok 
  var v = trim(arg_input_text);
  if (v.length>0) 
      return false;
  else
      return true;
}

  /*判断是否为数字，如是返回true，否返回false 
    如果为"" 返回 true 
  */
  function isnumber(arg_input_text)
  { //test in win IE6 ok
    if (isNaN(arg_input_text)==false && isblank(arg_input_text)==false) 
        return true;
    else 
        return false;
  }
  /*判断是否为数字，如是返回true，否返回false 
    如果为"" 返回 true 
  */
  function isinteger(arg_input_text)
  { //test in win ie6 ok
     if (isnumber(arg_input_text)==false) return false;//如果非数字则返回false
     if (arg_input_text.indexOf(".")>=0) return false; //如果有小数点则返回false
     return true;
  }
/*
  判断是否是YYYYmmDD类型的日期字串格式，正确返回true ,否返回 false 
  长度超过8为false , 空为true 
*/
function isyyyymmdd(arg_input_text)
{ //test in win ie6 ok
  if (arg_input_text.length==0) return true;  //为空返回 true 
  if (arg_input_text.length!=8) return false; //不是8位长度返回false 
  if (isnumber(arg_input_text)==false) return false; //非数字返回false 
	var tmpy=arg_input_text.substring(0,4);
	var tmpm=arg_input_text.substring(4,6);
	var tmpd=arg_input_text.substring(6);
	year=new Number(tmpy);
	month=new Number(tmpm);
	day=new Number(tmpd);
	if (!((1<=month) && (12>=month) && (31>=day) && (1<=day)) ) return false;
	if (!((year % 4)==0) && (month==2) && (day==29)) return false;
	if ((month<=7) && ((month % 2)==0) && (day>=31)) return false;
	if ((month>=8) && ((month % 2)==1) && (day>=31)) return false;
	if ((month==2) && (day==30)) return false;
	return true;
 }

/*
将字串(yyyymmdd)转换成： yyyy-mm-dd格式
注：此处不作日期格式检查 
*/
function toyyyy_mm_dd(arg_yyyymmdd_text)
{ // test in win ie6 ok 
		s1 = arg_yyyymmdd_text.substring(0,4);
		s2 = arg_yyyymmdd_text.substring (4,6);
		s3 = arg_yyyymmdd_text.substring(6);
		s4 = s1+"-"+s2+"-"+s3;
    return s4;
}

/*
 删除字串左边的空格 
*/ 
function ltrim(arg_str)
{ //test ok in win ie6 
	var v_newstr="";
	for(var i=0;i<arg_str.length;i++)
	{
		if(arg_str.charAt(i)==' ')
		{
			 continue;
		}
		else
		{
			v_newstr=arg_str.substring(i);
			break;
		}
	}
	return v_newstr;
}
/*
 去除字串右边的空格 
*/
function rtrim(arg_str)
{ //test in win ie6 ok 
	var v_newstr="";
	for(var i=arg_str.length-1;i>=0;i--)
	{
		if(arg_str.charAt(i)==' ')
		{
			continue;
		}
		else
		{
			v_newstr=arg_str.substring(0,i+1);
			break;
		}
	}
	return v_newstr;
}
/*
去除字串左右两边的空格 
*/  
function trim(arg_str)
{ //test in win ie6 ok 
	return ltrim(rtrim(arg_str));
}

/*
字符串全局替换，包括循环替换(例：'aaaaaaaaa'，'aa' , 'a' 结果为 a ) 
*/
function replace(arg_sourceString, arg_str1, arg_str2)
{ //test in win ie6 ok 
	var v_s = new String(arg_sourceString);
	if(v_s == null) return s;
	var v_temp = new String(arg_sourceString);
	while(true){
		v_s = v_temp;
		v_temp = v_s.replace(arg_str1,arg_str2);
		if(v_temp.toString() == v_s.toString()) break;
	}
	return v_temp;
}

//为了达到打开窗口时，就使当前窗口得到焦点，显示在最前面
try{
	window.focus();
}
catch(focusEx){;}

//自动适应iframe的高度以适应iframe中加载的页面的高度(defHeight为最小高度,defFix为默认调整的误差高度)
function autoFixIframeHeight(iframe,defHeight,defFix)
{
    try{
        defHeight = (!defHeight) ? 0 : defHeight; defHeight = defHeight - 0;
        defFix = (defFix == null || isNaN(defFix)) ? 50 : defFix; defFix = defFix - 0;
        
        //var newHeight = document.frames[iframe.name].document.body.scrollHeight + defFix;
        var newHeight = iframe.contentWindow.document.body.scrollHeight + defFix;
        iframe.height = (newHeight > defHeight) ? newHeight : defHeight;
    }
    catch(ex){
        window.status="****"+ex.message+"****";
    }
}  

//使指定的窗口的按钮，输入项只读
//处理哪些项只读，哪些项无效
function disInputWhenLoad(win,ignoreInputs,ignoreInputsByValue,hiddenInputs)
{
    if(!win) return;
    //定义一个被忽略的串
    ignoreInputs = (!ignoreInputs)?";;":ignoreInputs;//多个用分号间隔
    ignoreInputsByValue =(!ignoreInputsByValue)?";;":ignoreInputsByValue;    
    //将输入项变为只读
    
    hiddenInputs = (!hiddenInputs)?";computeScore_button;save_data_button;":hiddenInputs;//被隐藏的表单域
    
    var inputs = win.document.all.tags("input");
    for(var i=0;i<inputs.length;i++){
        var input = inputs[i];
        if(input.name && ignoreInputs.indexOf(";" + input.name + ";") >=0) continue;//被忽略处理的那种
        if(input.value && ignoreInputsByValue.indexOf(";" + input.value + ";") >=0) continue;//被忽略处理的那种
        
        if(input.name && hiddenInputs.indexOf(";" + input.name + ";") >=0){//隐藏的表单
            input.style.display="none";
            continue;
        }
        
        if(input.type=='text' || input.type=='hidden'){
            input.readOnly = true;
        }
        else{
            input.disabled = true;
        }
        
        input.onclick=function(){return false;}
        input.onfocus=function(){return false;}
        input.onblur=function(){return false;}
        input.onchange=function(){return false;}
        input.onpropertyChange=function(){return false;}
    }
    
    //处理出现了印章/画线时也隐藏
    var imgs = win.document.getElementsByTagName("img");
    for(var i=0;imgs && imgs.length && i<imgs.length;i++){
        if(imgs[i].className == 'drag'){
            imgs[i].style.display = 'none';
            imgs[i].style.visibility = 'hidden';
        }
    }
}

// function escape (html){
//   return String(html)
//     .replace(/&/g, '&amp;')
//     .replace(/</g, '&lt;')
//     .replace(/>/g, '&gt;')
//     .replace(/'/g, '&#39;')
//     .replace(/"/g, '&quot;');
// };

////////////////////////////////////////////////////////////////////////////////
///////////////////////代替window.prompt功能，参数也一样////////////////////////////
function PromptObject(title,value,btnCaptions,msg)
{
    this.title = (title) ? title : "";
    this.value = (value) ? value : "";
    this.btnCaptions = (btnCaptions && (btnCaptions instanceof Array)) ? btnCaptions : null;
    this.msg = (msg) ? msg : null;
    this.win = window;
}
//外部调用
//btnCaptions 按钮名字数组 new Array("确定","取消");
function showPromptDialog(title,value,btnCaptions)
{
    var retu = window.showModalDialog("common/showPromptDialog.htm", new PromptObject(title,value,btnCaptions) , "dialogWidth:430px;dialogHeight:170px;help:no;status:no;");

    if(typeof(retu) == 'undefined'){
        return null;
    }
    return retu;
}
/////代替功能window.confirm//////
/////解决显示三个按钮的情况：是/否/取消
//参数说明：type=2是普通的2按钮，返回值也为true,false
//        type=3是3个按钮，分别是：“是”，“否”，“取消”，返回值分别为1,0,-1
//		  btnCaptions为按钮标题数组，与type对应个数new Array("确定","取消");new Array("是","否","取消");
function showConfirmDialog(title,type,btnCaptions,width,height)
{
    type = (type && type == '3') ? '3' : '2';
    width = (!width) ? "330" : width;
    height = (!height) ? "170" : height;    
    var retu = window.showModalDialog("common/showConfirmDialog.htm", new PromptObject(title,type,btnCaptions) , "dialogWidth:"+width+"px;dialogHeight:"+height+"px;help:no;status:no;");
    switch(type){
        case 3:
            if(retu == null) return null;
            return retu;
        default:
            if(retu == null) return false;
            return retu;
    }
}

/////类似功能window.confirm，但包含一个输入信息的框，并返回输入框内容及按钮信息//////
/////解决显示三个按钮的情况：是/否/取消
//参数说明：type=2是普通的2按钮，返回值也为true,false（并返回msg字符串）
//        type=3是3个按钮，分别是：“是”，“否”，“取消”，返回值分别为1,0,-1（并返回msg字符串）
//		  btnCaptions为按钮标题数组，与type对应个数new Array("确定","取消");new Array("是","否","取消");
function showMsgInputDialog(title,type,btnCaptions,msg)//参数：标题，原有信息，按钮类型，按钮名称//返回：object[value,msg],其中toString为value
{
    type = (type && type == '3') ? '3' : '2';
    var retu = window.showModalDialog("common/showMsgInputDialog.htm", new PromptObject(title,type,btnCaptions,msg) , "dialogWidth:330px;dialogHeight:170px;help:no;status:no;");
    switch(type){
        case 3:
            if(retu == null) return null;
			break;
        default:
            if(retu == null){
            	retu = new Object();
            	retu.value = false;
            }
            break;
    }
    var retuObject = new Object();
    retuObject.value = retu.value;
    retuObject.msg   = retu.msg;
    
    retuObject.toString=function(){return this.value;}
    
    return retuObject;
}

/**模糊查询条件
  *string：模糊查询输入值
  *dataName：对应数据库字段
  *返回：sql查询条件语句片段（格式：‘xx’=‘xx’）
  *当输入为空时返回（‘’=‘’）
  **/
function fuzzy_search(string,dataName)
{
    if(string.length>0){
	var temp=dataName+"like ";
  	splitstring = string.split(" "); //双引号之间是个空格
 	string =""
	for(i = 0; i < splitstring.length; i++)
	{
		if(splitstring[i]!='')
		{
			string += splitstring[i] + " ";
		}
	}

	string = string.replace(/(^\s*)|(\s*$)/g,"");
 	string = "" + string.replace(/ and /g, "~!@and~!@") ;
	string = "" + string.replace(/ or /g, "~!@or~!@") ;
	string = "" + string.replace(/ \| /g, "~!@or~!@") ;
	string = "" + string.replace(/ /g, "~!@and~!@") ;
 	
	string =dataName+" like '%" + string;
	string = string.replace(/~!@and~!@/g, "%' and "+dataName+" like '%") ;
	string = string.replace(/~!@or~!@/g, "%' or "+dataName+" like '%") ;
	string +="%' ";
	}else{
	string="''=''";
	}
	return string;
	
}

///////////////////////////////////处理链接点击时加亮事件/////////////////////////////////////////
//参数：link链接对象，serialName可选，处理一个界面需要多个时生效
var _VAR_PreLinkObjects = null;
function playSignLink(link,serialName)
{
    if(!link) link = event.srcElement;
    if(!link) return;
    serialName = (!serialName)?"default":serialName;//一个画面中可以有多个
    if(_VAR_PreLinkObjects == null){
    	_VAR_PreLinkObjects = new Array();
    }
    
    var preLink = _VAR_PreLinkObjects[serialName];
    
    if(preLink){
        preLink.style.color = preLink.style.oldcolor;
        preLink.style.fontWeight = preLink.style.oldFontWeight;
    }
    preLink = link;
    preLink.style.oldcolor = preLink.style.color;
    preLink.style.color = "red";
    preLink.style.oldFontWeight = preLink.style.fontWeight;
    preLink.style.fontWeight = "bold";
    _VAR_PreLinkObjects[serialName] = preLink;
}

function netinnetAlert(title){
   alert (title);
}

function netinnetConfirm(title){
  return confirm (title);
}

/////////////////////////////////处理字符串转化，与Tools.java中匹配///////////////////////////////////
//转化为可在网页中使用
function htmlCode(src){
	if(!src) return src;
	return src;
}
//转化为可在js中使用
function jsCode(src){
	if(!src) return src;
	return src;
}

//转化为可在表单域中使用
function inputCode(src){
	if(!src) return src;
	return src;
}
//转化为可在url中使用
function urlCode(src){
	if(!src) return src;
	return src.replace(/\%/ig,"%25").replace(/\?/ig,"%3F").replace(/\&/ig,"%26");
}

function checkNumber(L1,L2,Num)
{
    if(!/^(-|\+|([0-9]))([0-9])*\.?([0-9])*$/.test(Num)){
        alert("输入含有不是数字的字符!");
        return false;
    }
    var Numstr = Num;
    Numstr = Numstr.replace("-","");
    Numstr = Numstr.replace("+","");
    
    if(/^00/.test(Numstr)){
        alert("输入数字不合理.");
        return false;
    }

    Numstr = Numstr.replace(".","");

    if(L1 > 0){//位数判断
        if(Numstr.length > L1){
            alert("数字的长度太长,只允许长度为:"+L1);
            return false;
        }
    }
    
    if(L2 > 0){//小数位数判断
        if(!/\./.test(Num)){
            if(Num.length > L1 - L2){
                alert("数字整数位太多,只允许"+(L1 - L2)+"位.");
                return false;
            }
        }
        else{
            var res = /\./.exec(Num);
            try{
                var pos = res.index;
                //alert("pos=" + pos);
                //alert(L1 - L2);
                if(pos > L1 - L2){
                    alert("数字整数位太多,只允许"+(L1 - L2)+"位.");
                    return false;
                }
                if(Numstr.length - pos > L2){
                    alert("数字小数位太多,只允许"+L2+"位小数");
                    return false;
                }
            }
            catch(ex){}
        }
    }


    return true;
}

function getCookie(c_name)
{//获得cookie
	if(document.cookie.length>0){
  	c_start=document.cookie.indexOf(c_name + "=")
  	if(c_start!=-1){ 
	    c_start=c_start + c_name.length+1 
	    c_end=document.cookie.indexOf(";",c_start)
	    if(c_end==-1) c_end=document.cookie.length
	    return unescape(document.cookie.substring(c_start,c_end))
    } 
  }
return "";
}

function setCookie(c_name,value,expiredays)
{
	var exdate=new Date()
	exdate.setDate(exdate.getDate()+expiredays)
	document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
}


function addModel($modal,action){
	var text = $modal.find("#myModalLabel").attr("myModalLabel-data");
    $modal.find("#myModalLabel").text("新增"+text);
    $modal.find("#sbm_btn").text("新增提交");
	$modal.find("form[name=fbox]").prop("action",action);
    $modal.find("input").each(function(){
    	var $this = $(this);
    	var inputType = $this.attr("type");
    	//console.log($(this).attr("type")+'##'+$(this).get(0).outerHTML)
    	if($(this).attr("ischecked")=="default"){
    		$(this).attr("checked",true);
    		}else if($(this).attr("defValue")){
    		$(this).val($(this).attr("defValue"));
    		}else if(!/radio|checkbox/ig.test($(this).attr("type"))){
    			$(this).val("");
    		}
    });
}

function updModel($modal,$base_data,action){
	var text = $modal.find("#myModalLabel").attr("myModalLabel-data");		//获取窗口头部后缀内容  如教师为： myModalLabel-data=教师
    $modal.find("#myModalLabel").text("修改"+text);							//拼凑为  修改教师
    $modal.find("#sbm_btn").text("修改提交");
    $modal.find("form[name=fbox]").prop("action",action);
	$base_data.each(function(){											 	//遍历td元素集
			var $this = $(this);  											//td对象
			var $this_text = trim($this.text());
			var eval_data_name = $this.attr("eval-data-name");			    //获取属性值
			var eval_data_type = $this.attr("eval-data-type");				//获取属性类型
			if(eval_data_type=="radio"){									//如果属性类型为radio
			var modal_obj  = $modal.find("input[name="+eval_data_name+"]"); //找到所有的radio
			 modal_obj.each(function(){
				 if(trim(String($(this).val()))==String($this_text)){
					$(this).attr("checked",true);
				}
				}); 
			}else{
			var modal_obj  = $modal.find("#"+eval_data_name);
			modal_obj.val($this_text);
			}
	});
}
